#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <assert.h>

#include "Terrain.h"


void initTerrain (Terrain* pterrain, const int deverouille, const int dimX_ter, 
const int dimY_ter, const int est_bonus_ter, const int cout_ter)
{	assert (pterrain!=NULL && (deverouille==1||deverouille==0) 
	&& (est_bonus_ter==1||est_bonus_ter==0) && cout_ter>=0);
	pterrain->deverouille_terrain = deverouille;
	pterrain->dimX_terrain = dimX_ter;
	pterrain->dimY_terrain = dimY_ter;
	pterrain->est_bonus_terrain = est_bonus_ter;
	pterrain->cout_terrain = cout_ter;
}

Terrain* creerTerrain (const int deverouille, const int dimX_ter, 
const int dimY_ter, const int est_bonus_ter, const int cout_ter)
{
	assert ((deverouille==1||deverouille==0) 
	&& (est_bonus_ter==1||est_bonus_ter==0) && cout_ter>=0);
	Terrain* pter=(Terrain*) malloc(sizeof(Terrain));
	initTerrain (pter, deverouille, dimX_ter, dimY_ter, est_bonus_ter, cout_ter);
	return pter;
}


void detruireTerrain ( Terrain** ppterrain)
{	
	assert (ppterrain!=NULL && *ppterrain!=NULL);
	free (* ppterrain);
	* ppterrain = NULL;
}

const int getDeverouilleTerrain (const Terrain* pterrain)
{	
	assert (pterrain!=NULL);	
	return pterrain->deverouille_terrain;
}

void setDeverouilleTerrain (Terrain* pterrain, const int dev_ter)
{
	assert (pterrain!=NULL && (dev_ter==1||dev_ter==0));
	pterrain->deverouille_terrain=dev_ter;
}

const int getDimX_terrain (const Terrain* pterrain)
{
	assert (pterrain!=NULL);
	return pterrain->dimX_terrain;
}

void setDimX_terrain (Terrain* pterrain, const int dimX_ter)
{	
	assert (pterrain!=NULL);
	pterrain->dimX_terrain=dimX_ter;
}

const int getDimY_terrain (const Terrain* pterrain)
{
	assert (pterrain!=NULL);
	return pterrain->dimY_terrain;
}

void setDimY_terrain (Terrain* pterrain, const int dimY_ter)
{
	assert (pterrain!=NULL);
	pterrain->dimY_terrain=dimY_ter;
}

const int getEstBonus (const Terrain* pterrain)
{
	assert (pterrain!=NULL);
	return pterrain->est_bonus_terrain;
}

void setEstBonus (Terrain* pterrain, const int est_bonus_ter)
{
	assert (pterrain!=NULL && (est_bonus_ter==1||est_bonus_ter==0));
	pterrain->est_bonus_terrain=est_bonus_ter;
}

const int getCoutTerrain (const Terrain* pterrain)
{
	assert (pterrain!=NULL);
	return pterrain->cout_terrain;
}

void setCoutTerrain (Terrain* pterrain, const int cout_ter)
{
	assert (pterrain!=NULL && cout_ter>=0);
	pterrain->cout_terrain=cout_ter;
}


/** @brief Cette procedure permet de tester toutes les fonctions du module*/
void testRegressionTerrain ()
{
	Terrain* pter=creerTerrain (1, 17, 15, 0, 100);
	
	printf("la taille du terrain devrait etre 17 et 15 elle est %d %d et la valeur des get est %d %d et l adresse est %p\n\n",
	       pter->dimX_terrain, pter->dimY_terrain, getDimX_terrain(pter), getDimY_terrain(pter), pter);
	printf("le cout du terrain devrait etre 100 il est %d et la valeur du get est %d \n\n",
	       pter->cout_terrain,getCoutTerrain(pter));
	printf("estbonus devrait etre 0 il est %d et la valeur du get est %d\n\n",
	       pter->est_bonus_terrain,getEstBonus(pter));
	
	setCoutTerrain (pter, 1000);
	setDimX_terrain (pter,200);
	setEstBonus (pter, 1);
	printf("les valeurs  devraient etre 1000,200 et 1 elle sont %d %d %d et les get donnent %d %d %d\n\n",
		pter->cout_terrain, pter->dimX_terrain, pter->est_bonus_terrain,
		getCoutTerrain(pter), getDimX_terrain(pter), getEstBonus(pter));
	setDimX_terrain (pter,20);
	//afficherTerrain (pter);
	detruireTerrain (&pter);
	printf("l adresse devrait etre nulle elle est %p\n\n",pter);
	
  
	
}
	

